/**
 * 
 */
package kr.pe.johnkim.dayve.rest;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.ArrayList;

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.util.Log;

import kr.pe.johnkim.dayve.provider.DayveCategory;
import kr.pe.johnkim.dayve.provider.DayveLog;
import kr.pe.johnkim.dayve.provider.DayveMember;
import kr.pe.johnkim.dayve.util.ExternalJoinConstant;

/**
 * My History RESTful 관련 기능들을 구현하는 클래스이다.
 * 
 * @author johnkim
 *
 */
public class DayveCommonRest {

	public static final String TAG = DayveCommonRest.class.getSimpleName();
	
	// 서버 주소.
	public static final String SERVER_URL = ExternalJoinConstant.MOBILE_SERVER_URL;
	
	/**
	 * 컨트롤러 매핑.
	 */
	// 공통관련 기능 컨트롤러 매핑.
	public static final String MYHISTORY_COMMON_CONTROLLER = "/myHistoryCommonController";
	// 멤버관련 기능 컨트롤러 매핑.
	public static final String MYHISTORY_MEMBER_CONTROLLER = "/myHistoryMemberController";
	// 그룹 기능 컨트롤러 매핑.
	public static final String MYHISTORY_GROUP_CONTROLLER = "/myHistoryGroupController";
	// 그룹<-->컨트롤러 관계 기능 컨트롤러 매핑.
	public static final String MYHISTORY_GROUP_RELATION_CONTROLLER = "/myHistoryGroupRelationController";
	// 카테고리 기능 컨트롤러 매핑.
	public static final String MYHISTORY_CATEGORY_CONTROLLER = "/myHistoryCategoryController";
	// 카테고리<-->아이템 관계 기능 컨트롤러 매핑.
	public static final String MYHISTORY_CATEGORY_RELATION_CONTROLLER = "/myHistoryCategoryRelationController";
	// 아이템 기능 컨트롤러 매핑.
	public static final String MYHISTORY_ITEM_CONTROLLER = "/myHistoryItemController";
	// 공지 사항 기능 컨트롤러 매핑.
	public static final String MYHISTORY_NOTICE_CONTROLLER = "/myHistoryNoticeController";
	
	/**
	 * 로그 메소드 정의.
	 */
	// 로그를 등록 한다.
	public static final String MYHISTORY_LOG_REGISTER = "/registerLog";
	
	/**
	 * 멤버 메소드 정의.
	 */
	
	// 멤버 등록 중복 검사를 한다.
	public static final String MYHISTORY_MEMBER_CHECK_DUPLICATION = "/checkDuplication";
	// 멤버를 등록 한다.
	public static final String MYHISTORY_MEMBER_REGISTER = "/registerMember";
	// server 로그인을 한다.
	public static final String MYHISTORY_MEMBER_LOGIN = "/login";
	
	/**
	 * 카테고리 메소드 정의.
	 */
	// 카테고리 중복 검사.
	public static final String MYHISTORY_CATEGORY_CHECK_DUPLICATION = "/checkDuplication";
	// 카테고리를 등록 한다.
	public static final String MYHISTORY_CATEGORY_REGISTER = "/registerCategory";
	// 카테고리 목록을 가져 온다.
	public static final String MYHISTORY_CATEGORY_LIST = "/selectCategoryList";
	// 사용자가 등록한 카테고리 전체 갯수를 가져 온다.
	public static final String MYHISTORY_CATEGORY_COUNT = "/selectCategoryCount";
	// 카테고리 상세 정보를 가져 온다.
	public static final String MYHISTORY_CATEGORY = "/selectCategory";
	// 카테고리 내용을 수정 한다.
	public static final String MYHISTORY_CATEGORY_MODIFY = "/updateCategory";
	// 카테고리를 비활성화 한다.
	public static final String MYHISTORY_CATEGORY_DEACTIVATE = "/updateDeactivateCategory";
	// 카테고리를 즐겨 찾기에 등록 한다.
	public static final String MYHISTORY_CATEGORY_FAVORITE = "/updateFavoriteCategory";
	// 카테고리를 즐겨 찾기에서 등록 해제 한다.
	public static final String MYHISTORY_CATEGORY_NOT_FAVORITE = "/updateDeactivateFavoriteCategory";
	
	/**
	 * server 에 로그를 저장 한다.
	 * client 의 시간을 기준으로 저장 한다.
	 * 
	 * @param dayveLog
	 * @throws JSONException
	 * @throws IOException
	 */
	public void registerLog(DayveLog dayveLog) throws JSONException, IOException {
		Log.i(TAG, "registerLog");
		
		JSONObject jsonLog = new JSONObject();
		
		jsonLog.put("id", dayveLog.getId());
		jsonLog.put("viewName", dayveLog.getViewName());
		jsonLog.put("accessDate", dayveLog.getAccessDate());
		
		String jsonString = "{\"myHistoryLog\":" + jsonLog.toString() + "}";
		
		Log.i(TAG, "dayveLog : " + jsonString);
		
		try {
			URL postUrl = new URL(SERVER_URL + MYHISTORY_COMMON_CONTROLLER + MYHISTORY_LOG_REGISTER);
			HttpURLConnection connection = (HttpURLConnection) postUrl.openConnection();
	        connection.setDoOutput(true);
	        connection.setInstanceFollowRedirects(false);
	        connection.setRequestMethod("POST");
	        connection.setRequestProperty("Content-Type", "application/json");
	        OutputStream os = connection.getOutputStream();
	        os.write(jsonString.getBytes());
	        os.flush();
	        
	        // Response 를 반드시 가져 와야 한다.
	        Log.i(TAG, "response code : " + connection.getResponseCode());
	        Log.i(TAG, "Success to register Log.");
		} catch (Exception e) {
			// TODO: handle exception
			Log.e(TAG, "Fail to register Log.");
		}
	}
}
